//
//  main.m
//  C01_基础知识
//
//  Created by dllo on 15/11/17.
//  Copyright © 2015年 dllo. All rights reserved.
//
/** 导入Foundtion框架*/
#import <Foundation/Foundation.h>

/**
 * 主函数，一个程序只有一个主函数(main).程序都是从main函数进入.
 * @param argc  参数的个数
 * @param argv[]  参数的值（数组）
 *
 * return int 整型
 */
int main(int argc, const char * argv[]) {
    
#pragma mark - 知识点1
    
    /** 进制转换(二进制 <--> 十进制) */

    
    
    
    
#pragma mark - 知识点2 基本数据类型
 
    
#if 0 /**< 条件编译 */
    
    /** 几种基本数据类型 */
     
    /** char类型,占一个字节 */
    char c = 'a';
    
    printf("c size :%ld\n",sizeof(char));
    
    /** int类型(整型),占四个字节 */
    int a = 100;
    
    /** float 类型(浮点类型),占四个字节 */
    float f = 3.14f;
    
    /** 短整型 */
    short s = 200;
    
    /** 长整型 */
    long l = 500;
    
    /** double类型 */
    double d = 3.115;
    
#endif
    
#if 0 /** 变量和常量 */
    
    
      /** 变量命名规范 */
      /** 只能由数字,字母,下划线,$组成,不能以数字开头
       *不能和系统保留字重复,如:int,if等
       *见名知意:如:age,number等
       *驼峰命名法,当多个单词组成时,后面单词首字母大写,如:withName
       */
    
    
    
   /** 定义一个整形变量a,同时赋值（100）*/
    int a = 100;
    
    a = 200;
    
   /** 输出a */
    printf("a:%d\n",a);
    
    int b;
    printf("b:%d\n",b);
    
    printf("over!");
    
#endif
    
    
#if 0 /** 栈区内存如何分配,从高到低开空间 释放从低到高 */
      /**
       * 栈区,从高到低分配内存.
       * 栈区内存由系统管理(开辟和回收).
       */
    int a = 100;
    int b = 200;
    printf("over");

#endif
    
    
#if 0 /** 交换两个int型变量的值 */
    int number1 = 100;
    int number2 = 200;
//    int temp = 0;
//    temp = number1;
//    number1 = number2;
//    number2 = temp;
    int temp = number1;
    number1 = number2;
    number2 = temp;
    printf("number 1 = %d\nnumber 2 = %d\n",number1,number2);
    
#endif
    
    
#if 0  /** char 类型 */
    
    /** char类型本质就是整型,特殊的整型,只有一个字节 */
    char c = 'a';  /**< 字符用单引号'' */
    printf("c:%d\n",c);
    printf("c:%c\n",c);
    
#endif
    
    
#pragma mark - 知识点3 运算符
#if 0
    /** '=' 赋值运算符 */
    /** 算数运算符 */
    int a = 100;
    int b = 12;
    printf("a + b = %d\n", a + b);
    printf("a - b = %d\n", a - b);
    printf("a * b = %d\n", a * b);
    printf("a / b = %d\n", a / b);
    printf("a对b取余 = %d\n", a % b);
    
    
    /** ++,-- 自增,自减 */
    int c = 0, d = 0;
    c = a++;
    printf("c = %d,a = %d\n", c, a);
    d = ++a;
    printf("d = %d,a = %d\n", d, a);
    
    /** 复合运算符: +=, -=, *=, /=, %= */
    /** a += b ,相当于 a = a + b */
    printf("a = %d\n", a += b);
    
    
#endif
    
#pragma mark - 知识点4 格式化输出
#if 0
    
    /**
    
     * printf(const char *restrict, ...)是函数,我们通过函数实现输出
    
     */
    printf("printf函数,输出双引号之间的内容\n");
    printf("\\ \n");
    printf("%% \n");
    
    int a = 100;
    int b = 200;
    printf("a:%d,b:%d\n", a, b);
    
    int c = 300;
    printf("c:%4d\n", c);  /**< 4 的含义是最少占四位,如果不够四位,默认用空格补齐 */
    printf("c:%04d\n", c); /**< 04 占四位,如果位数不够,用0补齐 */
    printf("c:%-4d\n", c); /**< -4 左对齐 */
    
    float f = 3.1415;
    printf("f:%f\n", f);
    printf("f:%.2f\n", f); /**< .2 小数点保留两位 */
    
    float number1 = 1;
    float number2 = 2;
    printf("number1 / number2:%.2f\n", number1 / number2);
    printf("number1 / number2:%g\n", number1 / number2);  /**< %g,自动保留小数点位数 */
    
#endif
    
#pragma mark - 知识点5 格式化输入
#if 0
    
    int a = 0;
    
    printf("a的内存地址为:%p\n", &a);
    
    printf("请输入整数:");
    scanf("%d", &a); /**< &符号,取址(取出内存地址) */
    
    printf("a = %d\n", a);
    
#endif
   
#if 0
    /** 连续输入 */
    int a = 0;
    int b = 0;
    printf("请输入两个整数:");
    scanf("%d%d", &a, &b);  /**< 注意:格式化输入要和两个双引号之间定义的格式一样输入*/
    
 //   scanf("%d\n", &a);  /**< scanf后面不能有\n */
    
    
    printf("a = %d,b = %d\n", a, b);
    
#endif
   
#if 0
    /** 练习:输入两个整数,计算他们的和,并且输出 */
    int a = 0;
    int b = 0;
    printf("请输入两个整数:");
    scanf("%d%d", &a, &b);
    printf("两个数的和为 : %d\n", a + b);
    
#endif
    
    
#if 0
    int a = 1,b = 2;
    a = a^b;
    b = a^b;
    a = a^b;
    printf("%d%d\n",a,b);
 
#endif
    
    

    return 0;
}
